/*
 * Copyright (C) 2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @addtogroup CodecBase
 * @{
 *
 * @brief CodecBase模块提供用于音视频封装、解封装、编解码基础功能的变量、属性以及函数。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 */

/**
 * @file native_avcodec_base.h
 *
 * @brief 声明用于音视频封装、解封装、编解码基础功能的Native API。
 * @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
 * @kit AVCodecKit
 * @include <multimedia/player_framework/native_avcodec_base.h>
 * @library libnative_media_codecbase.so
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 */

#ifndef NATIVE_AVCODEC_BASE_H
#define NATIVE_AVCODEC_BASE_H

#include <stdint.h>
#include <stdio.h>
#include "native_avbuffer.h"
#include "native_avmemory.h"

#ifdef __cplusplus
extern "C" {
#endif
/**
 * @brief 为图形接口定义native层对象。
 * @since 9
 */
typedef struct NativeWindow OHNativeWindow;

/**
 * @brief 为音视频编解码接口定义native层对象。
 * @since 9
 */
typedef struct OH_AVCodec OH_AVCodec;

/**
 * @brief 当OH_AVCodec实例运行出错时，会调用来上报具体的错误信息的函数指针。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param codec OH_AVCodec实例。
 * @param errorCode 特定错误代码。
 * @param userData 开发者执行回调所依赖的数据。
 * @since 9
 * @version 1.0
 */
typedef void (*OH_AVCodecOnError)(OH_AVCodec *codec, int32_t errorCode, void *userData);

/**
 * @brief 当视频解码输入码流分辨率或者视频编码输出码流的分辨率发生变化时，调用此函数指针报告新的流描述信息。\n
 * 从API 15开始，支持音频解码时，码流采样率、声道数或者音频采样格式发生变化时，将调用此函数指针报告新的流描述信息，
 * 支持检测此变化的解码格式有：<!--RP3--><!--RP3End-->AAC，FLAC，MP3，VORBIS。\n
 * 需要注意的是，OH_AVFormat指针的生命周期只有在函数指针被调用时才有效，调用结束后禁止继续访问。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param codec OH_AVCodec实例。
 * @param format 新输出流描述信息。
 * @param userData 开发者执行回调所依赖的数据。
 * @since 9
 * @version 1.0
 */
typedef void (*OH_AVCodecOnStreamChanged)(OH_AVCodec *codec, OH_AVFormat *format, void *userData);

/**
 * @brief 当OH_AVCodec在运行过程中需要新的输入数据时，将调用此函数指针，并携带可用的缓冲区来填充新的输入数据。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param codec OH_AVCodec实例。
 * @param index 与新可用的输入缓冲区相对应的索引。
 * @param data 新的可用输入缓冲区。
 * @param userData 开发者执行回调所依赖的数据。
 * @deprecated since 11
 * @useinstead {@link OH_AVCodecOnNeedInputBuffer}
 * @since 9
 * @version 1.0
 */
typedef void (*OH_AVCodecOnNeedInputData)(OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, void *userData);

/**
 * @brief 当OH_AVCodec运行过程中生成新的输出数据时，将调用此函数指针，并携带包含新输出数据的缓冲区。
 * 需要注意的是，OH_AVCodecBufferAttr指针的生命周期仅在调用函数指针时有效，这将禁止调用结束后继续访问。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param codec OH_AVCodec实例。
 * @param index 与新输出缓冲区对应的索引。
 * @param data 包含新输出数据的缓冲区。
 * @param attr 新输出缓冲区的说明。
 * @param userData 开发者执行回调所依赖的数据。
 * @deprecated since 11
 * @useinstead {@link OH_AVCodecOnNewOutputBuffer}
 * @since 9
 * @version 1.0
 */
typedef void (*OH_AVCodecOnNewOutputData)(OH_AVCodec *codec, uint32_t index, OH_AVMemory *data,
                                          OH_AVCodecBufferAttr *attr, void *userData);

/**
 * @brief 当OH_AVCodec在运行过程中需要新的输入数据时，将调用此函数指针，并携带可用的缓冲区来填充新的输入数据。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param codec OH_AVCodec实例。
 * @param index 与新可用的输入缓冲区相对应的索引。
 * @param buffer 新的可用输入缓冲区。
 * @param userData 开发者执行回调所依赖的数据。
 * @since 11
 */
typedef void (*OH_AVCodecOnNeedInputBuffer)(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData);

/**
 * @brief 当OH_AVCodec运行过程中生成新的输出数据时，将调用此函数指针，并携带包含新输出数据的缓冲区。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param codec OH_AVCodec实例。
 * @param index 与新输出缓冲区对应的索引。
 * @param buffer 包含新输出数据的缓冲区。
 * @param userData 开发者执行回调所依赖的数据。
 * @since 11
 */
typedef void (*OH_AVCodecOnNewOutputBuffer)(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData);

/**
 * @brief OH_AVCodec中所有异步回调函数指针的集合。将该结构体的实例注册到OH_AVCodec实例中，
 * 并处理回调上报的信息，以保证OH_AVCodec的正常运行。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @deprecated since 11
 * @useinstead {@link OH_AVCodecCallback}
 * @since 9
 * @version 1.0
 */
typedef struct OH_AVCodecAsyncCallback {
    /** 监控编解码器操作错误。 */
    OH_AVCodecOnError onError;
    /** 监控编解码器流变化。 */
    OH_AVCodecOnStreamChanged onStreamChanged;
    /** 监控编解码器需要输入数据。 */
    OH_AVCodecOnNeedInputData onNeedInputData;
    /** 监控编解码器已生成输出数据。 */
    OH_AVCodecOnNewOutputData onNeedOutputData;
} OH_AVCodecAsyncCallback;

/**
 * @brief OH_AVCodec中所有异步回调函数指针的集合。将该结构体的实例注册到OH_AVCodec实例中，
 * 并处理回调上报的信息，以保证OH_AVCodec的正常运行。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
typedef struct OH_AVCodecCallback {
    /** 监控编解码器操作错误。 */
    OH_AVCodecOnError onError;
    /** 监控编解码器流变化。 */
    OH_AVCodecOnStreamChanged onStreamChanged;
    /** 监控编解码器需要输入数据。 */
    OH_AVCodecOnNeedInputBuffer onNeedInputBuffer;
    /** 监控编解码器已生成输出数据。 */
    OH_AVCodecOnNewOutputBuffer onNewOutputBuffer;
} OH_AVCodecCallback;

/**
 * @brief 函数指针定义，用于提供获取用户自定义媒体数据的能力。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param data 要填充的缓冲区。
 * @param length 要读取的数据长度。
 * @param pos 从偏移量位置读取。
 * @return 读取到缓冲区的数据的实际长度。
 * @since 12
*/
typedef int32_t (*OH_AVDataSourceReadAt)(OH_AVBuffer *data, int32_t length, int64_t pos);

/**
 * @brief 用户自定义数据源。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
*/
typedef struct OH_AVDataSource {
    /**
     * @brief 数据源的总大小。
     */
    int64_t size;
    /**
     * @brief 数据源的数据回调。
     */
    OH_AVDataSourceReadAt readAt;
} OH_AVDataSource;

/**
 * @brief 函数指针定义，用于提供获取用户自定义媒体数据的能力。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @param data 要填充的缓冲区。
 * @param length 要读取的数据长度。
 * @param pos 从偏移量位置读取。
 * @param userData 用户自定义数据。
 * @return 读取到缓冲区的数据的实际长度。
 * @since 20
*/
typedef int32_t (*OH_AVDataSourceReadAtExt)(OH_AVBuffer *data, int32_t length, int64_t pos, void *userData);

/**
 * @brief 用户自定义数据源，回调支持通过userData传递用户自定义数据。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
*/
typedef struct OH_AVDataSourceExt {
    /**
     * @brief 数据源的总大小。
     */
    int64_t size;
    /**
     * @brief 数据源的数据回调。
     */
    OH_AVDataSourceReadAtExt readAt;
} OH_AVDataSourceExt;

/* 枚举音频和视频编解码器的MIME类型。 */

/** 
 * @brief AVC(H.264)视频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 * @version 1.0
 */
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_AVC;
/**
 * @brief AAC音频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_AAC;

/* 枚举音频和视频编解码器的MIME类型。 */

/**
 * @brief FLAC音频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_FLAC;
/**
 * @brief VORBIS音频解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_VORBIS;
/**
 * @brief MP3音频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_MPEG;
/**
 * @brief HEVC(H.265)视频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_HEVC;

/* 枚举封装的视频类型。*/

/**
 * @brief MPEG4视频编码的MIME类型，仅用于封装MPEG4视频码流使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @deprecated since 11
 * @useinstead {@link OH_AVCODEC_MIMETYPE_VIDEO_MPEG4_PART2}
 * @since 10
 */
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_MPEG4;

/**
 * @brief 视频MPEG4 Part2编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_MPEG4_PART2;

/**
 * @brief 视频MPEG2编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_MPEG2;

/**
 * @brief H.263视频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_H263;

/* 枚举封装的图片类型。 */

/**
 * @brief JPG图片编码的MIME类型，仅用于封装JPG封面时使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
extern const char *OH_AVCODEC_MIMETYPE_IMAGE_JPG;
/**
 * @brief PNG图片编码的MIME类型，仅用于封装PNG封面时使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
extern const char *OH_AVCODEC_MIMETYPE_IMAGE_PNG;
/**
 * @brief BMP图片编码的MIME类型，仅用于封装BMP封面时使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
extern const char *OH_AVCODEC_MIMETYPE_IMAGE_BMP;

/* 枚举音频编解码器的MIME类型。 */
/**
 * @brief Audio Vivid音频解码器的MIME类型。<!--Del-->（当前规格暂未开放）<!--DelEnd-->
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_VIVID;
/**
 * @brief AMR_NB音频解码器的MIME类型。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB;
/**
 * @brief AMR_WB音频解码器的MIME类型。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB;
/**
 * @brief OPUS音频编解码器的MIME类型。<!--Del-->（当前规格暂未开放）<!--DelEnd-->
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_OPUS;
/**
 * @brief G711MU音频编解码器的MIME类型。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_G711MU;

/**
 * @brief VVC(H.266)视频编解码器的MIME类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_AVCODEC_MIMETYPE_VIDEO_VVC;
/**
 * @brief APE音频解码器的MIME类型。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_APE;
/**
 * @brief SRT字幕解封装器的MIME类型。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
/**
 * @brief WEBVTT字幕解封装器的MIME类型。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT;

/**
 * @brief RAW音频码流的MIME类型。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 18
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_RAW;

/**
 * @brief G711A音频解码器的MIME类型。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_AVCODEC_MIMETYPE_AUDIO_G711A;

/**
 * @brief 表示surfacebuffer时间戳的键，值类型为int64_t。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @deprecated since 14
 * @since 9
 * @version 1.0
 */
extern const char *OH_ED_KEY_TIME_STAMP;
/** 
* @brief 表示surfacebuffer流结束符的键，值类型为int32_t。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @deprecated since 14
 * @since 9
*/
extern const char *OH_ED_KEY_EOS;

/* 提供统一的键，用于存储媒体描述。 */
/**
 * @brief 轨道媒体类型的键，值类型为int32_t，请参见{@link OH_MediaType}。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 * @version 1.0
 */
extern const char *OH_MD_KEY_TRACK_TYPE;
/**
 * @brief 编解码器MIME类型的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_CODEC_MIME;
/**
 * @brief 媒体文件持续时间的键，单位为微秒，值类型为int64_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_DURATION;
/**
 * @brief 比特率的键，值类型为int64_t。
 * 可以通过能力查询接口{@link OH_AVCapability_GetEncoderBitrateRange}接口来获取取值范围。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_BITRATE;
/**
 * @brief 设置解码输入码流大小最大值的键，值类型为int32_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_MAX_INPUT_SIZE;
/**
 * @brief 视频宽度的键，值类型为int32_t。\n
 * 在视频编解码流程中调用Configure接口时，使用此接口来设置视频帧的显示宽度。
 * 可以通过能力查询接口{@link OH_AVCapability_GetVideoWidthRange}来获取取值范围。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_WIDTH;
/**
 * @brief 视频高度键，值类型为int32_t。\n
 * 在视频编解码流程中调用Configure接口时，使用此接口来设置视频帧的显示高度。
 * 可以通过能力查询接口{@link OH_AVCapability_GetVideoHeightRange}来获取取值范围。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_HEIGHT;
/**
 * @brief 视频像素格式的键，值类型为int32_t，请参见{@link OH_AVPixelFormat}。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_PIXEL_FORMAT;
/**
 * @brief 音频原始格式的键，值类型为int32_t，请参见{@link OH_BitsPerSample}。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_AUDIO_SAMPLE_FORMAT;
/**
 * @brief 视频帧率的键，值类型为double。该值必须大于 0。
 * 可以通过能力查询接口{@link OH_AVCapability_GetVideoFrameRateRange}来获取取值范围。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_FRAME_RATE;
/**
 * @brief 视频编码码率模式，值类型为int32_t，请参见{@link OH_BitrateMode}。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE;
/**
 * @brief 编码档次，值类型为int32_t，请参见{@link OH_AVCProfile}、{@link OH_HEVCProfile}、{@link OH_AACProfile}。
 * 可以通过能力查询接口{@link OH_AVCapability_GetSupportedProfiles}来获取支持的档次。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_PROFILE;
/**
 * @brief 音频通道计数键，值类型为int32_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_AUD_CHANNEL_COUNT;
/**
 * @brief 音频采样率键，值类型为int32_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_AUD_SAMPLE_RATE;
/**
 * @brief 关键帧间隔的键，值类型为int32_t，单位为毫秒。该键是可选的且只用于视频编码。\n
 * 负值表示只有第一帧是关键帧，0表示所有帧都是关键帧，正值表示每(frameRate * 设置值)/1000帧一个关键帧。默认值为1000。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_I_FRAME_INTERVAL;
/**
 * @brief surface旋转角度的键。值类型为int32_t，应为{0, 90, 180, 270}，默认值为0。\n
 * 该键只在视频解码Surface模式下使用。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
*/
extern const char *OH_MD_KEY_ROTATION;

/* 提供统一的键，用于存储媒体描述。 */
/**
 * @brief 视频YUV值域标志的键，值类型为int32_t，1表示full range，0表示limited range，默认值为0。配置非0值将按照配置1处理，表示full range。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_RANGE_FLAG;
/**
 * @brief 视频色域的键，值类型为int32_t，默认值为COLOR_PRIMARY_UNSPECIFIED。
 * 请参见{@link OH_ColorPrimary}，遵循H.273标准Table2。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_COLOR_PRIMARIES;
/**
 * @brief 视频传递函数的键，值类型为int32_t，默认值为TRANSFER_CHARACTERISTIC_UNSPECIFIED。
 * 请参见{@link OH_TransferCharacteristic}，遵循H.273标准Table3。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_TRANSFER_CHARACTERISTICS;
/**
 * @brief 视频矩阵系数的键，值类型为int32_t，默认值为MATRIX_COEFFICIENT_UNSPECIFIED。
 * 请参见{@link OH_MatrixCoefficient}，遵循H.273标准Table4。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_MATRIX_COEFFICIENTS;
/**
 * @brief 请求立即编码I帧的键。值类型为int32_t。在调用{@link OH_VideoEncoder_SetParameter}阶段使用，或随帧立即生效。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_REQUEST_I_FRAME;
/**
 * @brief 所需编码质量的键。
 * 
 * 值类型为int32_t，默认值为50。在H.264、H.265编码场景值范围可以通过能力查询接口{@link OH_AVCapability_GetEncoderQualityRange}来获取取值范围，
 * 此键仅适用于配置在恒定质量模式下的编码器。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_QUALITY;
/**
 * @brief 编解码器特定数据的键，视频中表示传递SPS/PPS，音频中表示传递extraData，值类型为uint8_t\*。 <!--Del-->（视频编解码此功能暂未支持）<!--DelEnd-->
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_CODEC_CONFIG;
/**
 * @brief 媒体文件标题的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_TITLE;
/**
 * @brief 媒体文件艺术家的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_ARTIST;
/**
 * @brief 专辑的媒体文件的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_ALBUM;
/**
 * @brief 专辑艺术家的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_ALBUM_ARTIST;
/**
 * @brief 媒体文件日期的键，值类型为string，例如2024年。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_DATE;
/**
 * @brief 媒体文件注释的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_COMMENT;
/**
 * @brief 媒体文件moov元数据是否前置标志，值类型为int32_t, 1表示前置， 0表示不前置, 默认为0。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
*/
extern const char *OH_MD_KEY_ENABLE_MOOV_FRONT;
/**
 * @brief 媒体文件流派的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_GENRE;
/**
 * @brief 媒体文件版权的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_COPYRIGHT;
/**
 * @brief 媒体文件语言的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_LANGUAGE;
/**
 * @brief 媒体文件描述的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_DESCRIPTION;
/**
 * @brief 媒体文件歌词的键，值类型为string。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_LYRICS;
/**
 * @brief 媒体文件轨道数量的键，值类型为int32_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_TRACK_COUNT;
/**
 * @brief 所需编码通道布局的键。值类型为int64_t，此键仅适用于编码器。请参见{@link OH_AudioChannelLayout}。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_CHANNEL_LAYOUT;
/**
 * @brief 每个编码样本位数的键，值类型为int32_t。\n
 * API 20前，FLAC编码必须设置此参数，设置为1即可；未设置此参数配置FLAC编码器时，调用OH_AudioCodec_Configure会返回错误码AV_ERR_INVALID_VAL。该值无实际作用，不会影响编码结果。\n
 * 从API 20开始，无需设置此参数。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_BITS_PER_CODED_SAMPLE;
/**
 * @brief aac格式的键，aac格式分为ADTS格式和LATM格式。值类型为int32_t，0表示LATM格式，1表示ADTS格式。aac解码器支持。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_AAC_IS_ADTS;
/**
 * @brief aac sbr模式的键，值类型为int32_t，aac编码器支持。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_SBR;
/**
 * @brief flac兼容性等级的键，值类型为int32_t，仅在音频编码使用。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_COMPLIANCE_LEVEL;
/**
 * @brief vorbis标识头的键，值类型为uint8_t*，仅vorbis解码器支持。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_IDENTIFICATION_HEADER;
/**
 * @brief vorbis设置头的键，值类型为uint8_t*，仅vorbis解码器支持。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_KEY_SETUP_HEADER;
/**
 * @brief 视频缩放模式，值类型为int32_t，请参见{@link OH_ScalingMode}。\n
 * 建议直接调用{@link OH_NativeWindow_NativeWindowSetScalingModeV2}接口进行设置。该键是可选的且只用于视频解码Surface模式。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 * @useinstead {@link OH_NativeWindow_NativeWindowSetScalingModeV2}
 * @deprecated since 14
*/
extern const char *OH_MD_KEY_SCALING_MODE;
/**
 * @brief 最大输入缓冲区个数的键，值类型为int32_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_MAX_INPUT_BUFFER_COUNT;
/**
 * @brief 最大输出缓冲区个数的键，值类型int32_t。
 * 
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
*/
extern const char *OH_MD_MAX_OUTPUT_BUFFER_COUNT;

/**
 * @brief 音频编解码压缩水平的键，只在音频编码使用，值类型为int32_t。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_MD_KEY_AUDIO_COMPRESSION_LEVEL;
/**
 * @brief 媒体文件中的视频轨是否为HDR Vivid的键，支持封装和解封装，值类型为int32_t。\n
 * 1表示是HDR Vivid视频轨，0表示不是HDR Vivid视频轨。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_MD_KEY_VIDEO_IS_HDR_VIVID;
/**
 * @brief 音频对象数目的键. 值类型为int32_t，只有Audio Vivid解码使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_MD_KEY_AUDIO_OBJECT_NUMBER;
/**
 * @brief Audio Vivid元数据的键，值类型为uint8_t*，只有Audio Vivid解码使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 11
 */
extern const char *OH_MD_KEY_AUDIO_VIVID_METADATA;

/**
 * @brief 在视频编码中获取长期参考帧的最大个数的键，值类型为int32_t。\n
 * 可以通过{@link OH_AVCapability_GetFeatureProperties}接口和
 * 枚举值{@link OH_AVCapabilityFeature}中的VIDEO_ENCODER_LONG_TERM_REFERENCE来查询这个最大值。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT;
/**
 * @brief 使能分层编码的键，值类型为int32_t，1表示使能，0表示不使能，默认值为0。配置非0值将按照配置1处理，表示使能。\n
 * 使用前可以通过{@link OH_AVCapability_IsFeatureSupported}接口和枚举值{@link OH_AVCapabilityFeature}中的
 * VIDEO_ENCODER_TEMPORAL_SCALABILITY来查询当前视频编码器是否支持分层编码。\n
 * 该键是可选的且只用于视频编码，在Configure阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY;
/**
 * @brief 描述图片组基本层图片的间隔大小的键，值类型为int32_t，只在使能分层编码时生效。\n
 * 该键是可选的且只用于视频编码，在Configure阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_SIZE;
/**
 * @brief 描述图片组内参考模式的键，值类型为int32_t，请参见{@link OH_TemporalGopReferenceMode}，只在使能分层编码时生效。\n
 * 该键是可选的且只用于视频编码，在Configure阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_REFERENCE_MODE;
/**
 * @brief 描述长期参考帧个数的键，值类型为int32_t，必须在支持的值范围内使用。\n
 * 使用前可以通过{@link OH_AVCapability_GetFeatureProperties}接口和
 * 枚举值{@link OH_AVCapabilityFeature}中的VIDEO_ENCODER_LONG_TERM_REFERENCE来查询支持的LTR数目。\n
 * 该键是可选的且只用于视频编码，在Configure阶段使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_LTR_FRAME_COUNT;

/**
 * @brief 标记当前帧为长期参考帧的键，值类型为int32_t，1表示被标记，0表示未被标记，默认值为0。配置非0值将按照配置1处理，表示被标记。\n
 * 只在长期参考帧个数被配置后生效。\n
 * 该键是可选的且只用于视频编码输入轮转中，配置后立即生效。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_PER_FRAME_MARK_LTR;

/**
 * @brief 描述当前帧参考的长期参考帧帧的POC号的键，值类型为int32_t。\n
 * 该键是可选的且只用于视频编码输入轮转中，配置后立即生效。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_PER_FRAME_USE_LTR;

/**
 * @brief 当前OH_AVBuffer中输出的码流对应的帧是否为长期参考帧的键，值类型为int32_t，1表示是LTR，0表示不是LTR，默认值为0。配置非0值将按照配置1处理，表示是LTR。\n
 * 该键是可选的且只用于视频编码输出轮转中。\n
 * 表示帧的属性。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_PER_FRAME_IS_LTR;

/**
 * @brief 描述帧的POC的键，值类型为int32_t。\n
 * 该键是可选的且只用于视频编码输出轮转中。\n
 * 表示帧的属性。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_PER_FRAME_POC;
/**
 * @brief 描述裁剪矩形顶部坐标(y)值的键，值类型为int32_t。\n
 * 包含裁剪框顶部的行，行索引从0开始。\n
 * 该键只用于视频解码。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_CROP_TOP;
/**
 * @brief 描述裁剪矩形底部坐标(y)值的键，值类型为int32_t。\n
 * 包含裁剪框底部的行，行索引从0开始。\n
 * 该键只用于视频解码。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_CROP_BOTTOM;
/**
 * @brief 描述裁剪矩形左坐标(x)值的键，值类型为int32_t。\n
 * 包含裁剪框最左边的列，列索引从0开始。\n
 * 该键只用于视频解码。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_CROP_LEFT;
/**
 * @brief 描述裁剪矩形右坐标(x)值的键，值类型为int32_t。\n
 * 包含裁剪框最右边的列，列索引从0开始。\n
 * 该键只用于视频解码。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_CROP_RIGHT;
/**
 * @brief 描述视频帧宽跨距的键，值类型为int32_t。\n
 * 宽跨距是像素的索引与正下方像素的索引之间的差。\n
 * 对于YUV420格式，宽跨距对应于Y平面，U和V平面的跨距可以根据颜色格式计算，但通常未定义，并且取决于设备和版本。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_STRIDE;
/**
 * @brief 描述视频帧高跨距的键，值类型为int32_t。\n
 * 高跨距是指从Y平面顶部到U平面顶部必须偏移的行数。本质上，U平面的偏移量是sliceHeight * stride。\n
 * U/V平面的高度可以根据颜色格式计算，尽管它通常是未定义的，并且取决于设备和版本。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_SLICE_HEIGHT;
/**
 * @brief 描述视频帧真实宽度的键，值类型为int32_t。\n
 * 视频解码时调用{@link OH_VideoDecoder_GetOutputDescription}接口，可以从其返回的OH_AVFormat中解析出宽度值。\n
 * 当解码输出码流<!--RP2--><!--RP2End-->变化时，也可从{@link OH_AVCodecOnStreamChanged}返回的OH_AVForamt实例中解析出宽度值。\n
 * 从OH_AVForamt实例中解析出来的是对齐后的宽、高与调用Configure接口设置的OH_MD_KEY_WIDTH、OH_MD_KEY_HEIGHT不一样。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_PIC_WIDTH;
/**
 * @brief 描述视频帧真实高度的键，值类型为int32_t。\n
 * 视频解码时调用{@link OH_VideoDecoder_GetOutputDescription}接口，可以从其返回的OH_AVFormat中解析出高度值。\n
 * 当解码输出码流<!--RP2--><!--RP2End-->变化时，也可从{@link OH_AVCodecOnStreamChanged}返回的OH_AVForamt实例中解析出高度值。\n
 * 从OH_AVForamt实例中解析出来的是对齐后的宽、高与调用Configure接口设置的OH_MD_KEY_WIDTH、OH_MD_KEY_HEIGHT不一样。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_PIC_HEIGHT;
/**
 * @brief 使能低时延视频解码的键，值类型为int32_t，1表示使能，0表示不使能，默认值为0。配置非0值将按照配置1处理，表示使能。\n
 * 该键是可选的，在Configure阶段使用。\n
 * 如果使能，则视频解码器持有的输入和输出数据不会超过解码器标准所要求的数量。\n
 * 可以通过能力查询接口{@link OH_AVCapability_IsFeatureSupported}来查询特定解码器是否支持低时延。若解码器支持，使能此接口时，视频解码器将按照解码序输出帧。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENABLE_LOW_LATENCY;
/**
 * @brief 描述视频编码器允许的最大量化参数的键，值类型为int32_t。\n
 * 在Configure/SetParameter阶段使用，或随帧立即生效。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_QP_MAX;
/**
 * @brief 描述视频编码器允许的最小量化参数的键，值类型为int32_t。\n
 * 在Configure/SetParameter阶段使用，或随帧立即生效。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_QP_MIN;
/**
 * @brief 描述视频帧平均量化参数的键，值类型为int32_t。\n
 * 表示当前帧编码块的平均qp值，随{@link OH_AVBuffer}输出。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_QP_AVERAGE;
/**
 * @brief 描述视频帧平方误差的键，值类型为double。\n
 * 表示当前帧编码块的MSE统计值，随{@link OH_AVBuffer}输出。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_MSE;
/**
 * @brief AVBuffer中携带的音视频或字幕的sample对应的解码时间戳的键，以微秒为单位，值类型为int64_t。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_DECODING_TIMESTAMP;
/**
 * @brief AVBuffer中携带的音视频或字幕的sample对应的持续时间的键，以微秒为单位，值类型为int64_t。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_BUFFER_DURATION;
/**
 * @brief 样本长宽比的键，值类型为double。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_SAR;
/**
 * @brief 媒体文件中第一帧起始位置开始时间的键，以微秒为单位，值类型为int64_t。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_START_TIME;
/**
 * @brief 轨道开始时间的键，以微秒为单位，值类型为int64_t。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_TRACK_START_TIME;
/**
 * @brief 设置视频解码器输出色彩空间的键，值类型为int32_t。\n
 * 支持的值为OH_COLORSPACE_BT709_LIMIT，请参见{@link OH_NativeBuffer_ColorSpace}。\n
 * 在视频解码调用{@link OH_VideoDecoder_Configure}接口时使用此接口。\n
 * 在启动OH_VideoDecoder_Start接口前，必须要先调用OH_VideoDecoder_Prepare接口。\n
 * 如果支持色彩空间转换功能并配置了此键，则视频解码器会自动将HDR Vivid视频转码为指定的色彩空间。\n
 * 如果不支持色彩空间转换功能，则接口{@link OH_VideoDecoder_Configure}返回错误码
 * {@link OH_AVErrCode}中的AV_ERR_VIDEO_UNSUPPORTED_COLOR_SPACE_CONVERSION。
 * 如果输入视频不是HDR Vivid视频，则会通过回调函数{@link OH_AVCodecOnError}报告错误
 * {@link OH_AVErrCode}中的AV_ERR_VIDEO_UNSUPPORTED_COLOR_SPACE_CONVERSION。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
extern const char *OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE;
/**
 * @brief 解码器是否打开视频可变帧率功能的键，值类型为int32_t。\n
 * 1代表使能视频可变帧率功能，0代表不使能。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 15
 */
extern const char *OH_MD_KEY_VIDEO_DECODER_OUTPUT_ENABLE_VRR;
/**
 * @brief 媒体文件创建时间的元数据，值类型为string。使用ISO 8601标准的时间格式且为UTC时间，时间格式参考："2024-12-28T00:00:00:000000Z"。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 14
 */
extern const char *OH_MD_KEY_CREATION_TIME;
/**
 * @brief 如果在上一帧提交给编码器之后没有新的帧可用，则会以毫秒为单位重复提交最后一帧，值类型为int32_t。\n
 * 该键只用于视频编码Surface模式，在Configure阶段使用。\n
 * 配置的值：\n
 * - 小于等于0：Configure阶段会被拦截，返回ERROR AV_ERR_INVALID_VAL。\n
 * - 大于0：如果在上一帧提交给编码器之后没有新的帧可用，则会以毫秒为单位重复提交最后一帧。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 18
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_REPEAT_PREVIOUS_FRAME_AFTER;
/**
 * @brief 描述编码器在没有新的帧可用的情况下，可以对之前的帧进行重复编码的最大次数，值类型为int32_t。\n
 * 该键仅在OH_MD_KEY_VIDEO_ENCODER_REPEAT_PREVIOUS_FRAME_AFTER可用时生效，在Configure阶段使用。\n
 * 配置的值：\n
 * - 等于0：Configure阶段会被拦截，返回ERROR AV_ERR_INVALID_VAL。\n
 * - 小于0：在没有新的帧提交给编码器的这段时间内，编码器会一直重复编上一帧，直到达到系统上限。\n
 * - 大于0：在没有新的帧提交给编码器的这段时间内，最多可以重复编码的帧数。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 18
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_REPEAT_PREVIOUS_MAX_COUNT;
/**
 * @brief 使能B帧编码的键，值类型为int32_t（0或1）：1表示使能，0表示不使能。
 *
 * 该键是可选项，仅用于视频编码器，默认值为0。\n
 * 如果使能，视频编码器将使用B帧，解码顺序与显示顺序会不同。\n
 * 对于不支持的平台，配置该键不会生效。\n
 * 可通过{@link OH_AVCapability_IsFeatureSupported}接口和枚举值{@link OH_AVCapabilityFeature}.VIDEO_ENCODER_B_FRAME查询平台能力。\n
 * 该键仅在configure阶段使用。\n
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_ENABLE_B_FRAME;
/**
 * @brief 描述视频编码器支持的最大连续B帧数的键，值类型为int32_t。
 *
 * 注意：该键目前仅用于查询编码器能力。\n
 * 使用规范如下：\n
 * 1. 通过{@link OH_AVCapability_IsFeatureSupported}接口和枚举值{@link OH_AVCapabilityFeature}.VIDEO_ENCODER_B_FRAME
 * 查询特性支持情况。\n
 * 2. 通过{@link OH_AVCapability_GetFeatureProperties}接口和枚举值{@link OH_AVCapabilityFeature}.VIDEO_ENCODER_B_FRAME
 * 获取OH_AVFormat指针。\n
 * 3. 通过{@link OH_AVFormat_GetIntValue}接口和本键获取最大B帧数。\n
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_MAX_B_FRAMES;
/**
 * @brief 用于视频编码中，使能ROI编码并下发ROI参数，随帧设置且实时生效。\n
 *
 * 参数需满足"Top1,Left1-Bottom1,Right1=Offset1;Top2,Left2-Bottom2,Right2=Offset2;"的格式，多个ROI参数之间使用";"连接。\n
 * Top、Left、Bottom、Right指定一个ROI区域的上、左、下、右边界，Offset指定deltaQP，“=Offset”可以省略，省略时使用默认值（-3）。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_ROI_PARAMS;
/**
 * @brief 指定SQR码控模式的质量参数，取值范围为[0, 51]（同编码量化参数QP），值越小，编码输出码率越大，质量越好。\n
 * 在Configure/SetParameter阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_SQR_FACTOR;
/**
 * @brief 指定SQR码控模式的最大码率，使用{@link OH_AVCapability_GetEncoderBitrateRange}方法获取取值范围（同OH_MD_KEY_BITRATE），
 * 单位bps，值类型为int64_t。\n
 * 在Configure/SetParameter阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_MAX_BITRATE;
/**
 * @brief 使能基于显示时间戳(PTS)的码控模式的键，值类型为int32_t，1表示使能，0表示不使能，默认值为0。配置非0值将按照配置1处理，表示使能。\n
 *
 * 该键值是可选的且只用于视频编码。\n
 * 如果使能，则必须在每个视频帧中携带PTS信息，并发送到编码器。
 * Surface模式下，通过{@link OH_NativeWindow_NativeWindowHandleOpt}接口设置PTS，时间单位为纳秒(ns)；
 * Buffer模式下，通过{@link OH_AVBuffer_SetBufferAttr}接口设置PTS，时间单位为微秒(us)。\n
 * 在Configure阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_VIDEO_ENCODER_ENABLE_PTS_BASED_RATECONTROL;
/**
 * @brief 媒体文件轨道间参考、被参考关系，值类型为int32_t*。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
*/
extern const char *OH_MD_KEY_REFERENCE_TRACK_IDS;
/**
 * @brief 媒体文件辅助轨类型，值类型为string。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
*/
extern const char *OH_MD_KEY_TRACK_REFERENCE_TYPE;
/**
 * @brief 媒体文件辅助轨描述信息，值类型为string。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
*/
extern const char *OH_MD_KEY_TRACK_DESCRIPTION;
/**
 * @brief 使能音视频编解码同步模式的键，值类型为int32_t，1表示使能，0表示不使能，默认值为0。配置非0值将按照配置1处理，表示使能。该键是可选。\n
 *
 * 如果使能，需要注意：\n
 * 1. 编解码器不可设置回调函数。\n
 * 2. 必须使用缓冲区查询接口替代回调。\n
 * 3. 只能在Configure阶段使用。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_ENABLE_SYNC_MODE;
/**
 * @brief 用于指定视频解码器关闭时是否输出空白帧的键，值类型为int32_t，1表示使能，0表示不使能，默认值为0。配置非0值将按照配置1处理，表示使能。
 * 该键是可选的且仅用于视频解码Surface模式。\n
 * 使能后，视频解码器在停止或释放时将输出空白帧（通常为黑色），以确保显示设备平滑过渡到无信号状态。该机制可避免因解码器突然终止导致的显示残留或画面闪烁问题。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 20
 */
extern const char *OH_MD_KEY_VIDEO_DECODER_BLANK_FRAME_ON_SHUTDOWN;

/**
 * @brief 媒体类型。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 * @version 1.0
 */
typedef enum OH_MediaType {
    /** 音频轨。*/
    MEDIA_TYPE_AUD = 0,
    /** 视频轨。 */
    MEDIA_TYPE_VID = 1,
    /**
     * @brief 字幕轨。
     * @since 12
     */
    MEDIA_TYPE_SUBTITLE = 2,
     /** 
     * @brief timed metadata轨。
     * @since 20
     */
    MEDIA_TYPE_TIMED_METADATA = 5,
    /** 
     * @brief 辅助轨。
     * @since 20
     */
    MEDIA_TYPE_AUXILIARY = 6,
} OH_MediaType;

/**
 * @brief AAC档次。<!--Del--><br/>（AAC_PROFILE_HE、AAC_PROFILE_HE_V2暂未开放）<!--DelEnd-->
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 * @version 1.0
 */
typedef enum OH_AACProfile {
    /** AAC编码档次为Low Complexity级别。*/
    AAC_PROFILE_LC = 0,
    /**
     * @brief AAC编码档次为High Efficiency级别。<!--Del-->（此规格暂未开放）<!--DelEnd-->
     * @since 14
     */
    AAC_PROFILE_HE = 3,
    /**
     * @brief AAC编码档次为High Efficiency v2级别。<!--Del-->（此规格暂未开放）<!--DelEnd-->
     * @since 14
     */
    AAC_PROFILE_HE_V2 = 4,
} OH_AACProfile;

/**
 * @brief AVC档次。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 9
 * @version 1.0
 */
typedef enum OH_AVCProfile {
    /** AVC编码档次为基本档次。*/
    AVC_PROFILE_BASELINE = 0,
    /** AVC编码档次为高档次。*/
    AVC_PROFILE_HIGH = 4,
    /** AVC编码档次为主档次。*/
    AVC_PROFILE_MAIN = 8,
} OH_AVCProfile;

/**
 * @brief HEVC档次。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_HEVCProfile {
    /** HEVC编码档次为主档次。*/
    HEVC_PROFILE_MAIN = 0,
    /** HEVC编码档次为10bit主档次。*/
    HEVC_PROFILE_MAIN_10 = 1,
    /** HEVC编码档次为静止图像主档次。*/
    HEVC_PROFILE_MAIN_STILL = 2,
    /** 
     * @brief HEVC编码档次为HDR10主档次。
     * @deprecated since 14
     */
    HEVC_PROFILE_MAIN_10_HDR10 = 3,
    /** 
     * @brief HEVC编码档次为HDR10+主档次。
     * @deprecated since 14
     */
    HEVC_PROFILE_MAIN_10_HDR10_PLUS = 4,
} OH_HEVCProfile;

/**
 * @brief VVC档次。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 15
 */
typedef enum OH_VVCProfile {
    /** VVC编码档次为10bit主档次。 */
    VVC_PROFILE_MAIN_10 = 1,
    /** VVC编码档次为12bit主档次。 */
    VVC_PROFILE_MAIN_12 = 2,
    /** VVC编码档次为12bit帧内主档次。 */
    VVC_PROFILE_MAIN_12_INTRA = 10,
    /** VVC编码档次为多层编码10bit主档次。 */
    VVC_PROFILE_MULTI_MAIN_10 = 17,
    /** VVC编码档次为10bit全采样主档次。 */
    VVC_PROFILE_MAIN_10_444 = 33,
    /** VVC编码档次为12bit全采样主档次。 */
    VVC_PROFILE_MAIN_12_444 = 34,
    /** VVC编码档次为16bit全采样主档次。 */
    VVC_PROFILE_MAIN_16_444 = 36,
    /** VVC编码档次为12bit全采样帧内主档次。 */
    VVC_PROFILE_MAIN_12_444_INTRA = 42,
    /** VVC编码档次为16bit全采样帧内主档次。 */
    VVC_PROFILE_MAIN_16_444_INTRA = 44,
    /** VVC编码档次为多层编码10bit全采样主档次。 */
    VVC_PROFILE_MULTI_MAIN_10_444 = 49,
    /** VVC编码档次为10bit静止图像主档次。 */
    VVC_PROFILE_MAIN_10_STILL = 65,
    /** VVC编码档次为12bit静止图像主档次。 */
    VVC_PROFILE_MAIN_12_STILL = 66,
    /** VVC编码档次为10bit全采样静止图像主档次。 */
    VVC_PROFILE_MAIN_10_444_STILL = 97,
    /** VVC编码档次为12bit全采样静止图像主档次。 */
    VVC_PROFILE_MAIN_12_444_STILL = 98,
    /** VVC编码档次为16bit全采样静止图像主档次。 */
    VVC_PROFILE_MAIN_16_444_STILL = 100,
} OH_VVCProfile;

/**
 * @brief MPEG2档次。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
typedef enum OH_MPEG2Profile {
    /** 简单档次。 */
    MPEG2_PROFILE_SIMPLE = 0,
    /** 主档次。 */
    MPEG2_PROFILE_MAIN  = 1,
    /** 信噪比可分级档次。 */
    MPEG2_PROFILE_SNR_SCALABLE  = 2,
    /** 空间可分级档次。 */
    MPEG2_PROFILE_SPATIALLY_SCALABLE = 3,
    /** 高级档次。 */
    MPEG2_PROFILE_HIGH = 4,
    /** 4:2:2档次。 */
    MPEG2_PROFILE_422 = 5,
} OH_MPEG2Profile;

/**
 * @brief MPEG4档次。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
typedef enum OH_MPEG4Profile {
    /** 简单档次。 */
    MPEG4_PROFILE_SIMPLE = 0,
    /** 简单可分级档次。 */
    MPEG4_PROFILE_SIMPLE_SCALABLE = 1,
    /** 核心档次。 */
    MPEG4_PROFILE_CORE = 2,
    /** 主档次。 */
    MPEG4_PROFILE_MAIN = 3,
    /** N位档次。 */
    MPEG4_PROFILE_N_BIT  = 4,
    /** 混合档次。 */
    MPEG4_PROFILE_HYBRID = 5,
    /** 基本动画纹理档次。 */
    MPEG4_PROFILE_BASIC_ANIMATED_TEXTURE = 6,
    /** 可分级纹理档次。 */
    MPEG4_PROFILE_SCALABLE_TEXTURE = 7,
    /** 简单FA档次。 */
    MPEG4_PROFILE_SIMPLE_FA = 8,
    /** 高级实时简单档次。 */
    MPEG4_PROFILE_ADVANCED_REAL_TIME_SIMPLE = 9,
    /** 核心可分级档次。 */
    MPEG4_PROFILE_CORE_SCALABLE = 10,
    /** 高级编码效率档次。 */
    MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY = 11,
    /** 高级核心档次。 */
    MPEG4_PROFILE_ADVANCED_CORE = 12,
    /** 高级可分级纹理档次。 */
    MPEG4_PROFILE_ADVANCED_SCALABLE_TEXTURE = 13,
    /** 高级简单档次。 */
    MPEG4_PROFILE_ADVANCED_SIMPLE = 17,
} OH_MPEG4Profile;

/**
 * @brief H.263档次。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
typedef enum OH_H263Profile {
    /** 基线档次。 */
    H263_PROFILE_BASELINE = 0,
    /** 版本1向后兼容档次。 */
    H263_PROFILE_VERSION_1_BACKWARD_COMPATIBILITY = 2,
} OH_H263Profile;

/**
 * @brief 封装器支持的输出文件格式。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_AVOutputFormat {
    /** 输出文件格式默认值，默认为MP4格式。*/
    AV_OUTPUT_FORMAT_DEFAULT = 0,
    /** 输出文件格式为MP4格式。*/
    AV_OUTPUT_FORMAT_MPEG_4 = 2,
    /** 输出文件格式为M4A格式。*/
    AV_OUTPUT_FORMAT_M4A = 6,
	/**
     * @brief 输出文件格式为AMR格式。
     * @since 12
     */
    AV_OUTPUT_FORMAT_AMR = 8,
	/**
     * @brief 输出文件格式为MP3格式。
     * @since 12
     */
    AV_OUTPUT_FORMAT_MP3 = 9,
    /**
     * @brief 输出文件格式为WAV格式。
     * @since 12
     */
    AV_OUTPUT_FORMAT_WAV = 10,
    /**
     * @brief 输出文件格式为AAC格式。
     * @since 18
     */
    AV_OUTPUT_FORMAT_AAC = 11,
    /**
     * @brief 输出文件格式为FLAC格式。
     * @since 20
     */
    AV_OUTPUT_FORMAT_FLAC = 12,
} OH_AVOutputFormat;

/**
 * @brief 跳转模式。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_AVSeekMode {
    /** 指定时间位置的下一I帧。若时间点后没有I帧，该模式可能跳转失败。 */
    SEEK_MODE_NEXT_SYNC = 0,
    /** 指定时间位置的上一I帧。 */
    SEEK_MODE_PREVIOUS_SYNC,
    /** 指定时间位置的最近I帧。 */
    SEEK_MODE_CLOSEST_SYNC,
} OH_AVSeekMode;

/**
 * @brief 缩放模式，只在Surface模式下使用。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @deprecated since 14
 * @useinstead {@link OHScalingModeV2}
 * @since 10
 */
typedef enum OH_ScalingMode {
    /** 
     * @brief 根据窗口尺寸自适应调整图像大小。
     * @deprecated since 14
     * @useinstead {@link OH_SCALING_MODE_SCALE_TO_WINDOW_V2}
    */
    SCALING_MODE_SCALE_TO_WINDOW = 1,
    /** 
     * 根据窗口尺寸裁剪图像大小。
     * @deprecated since 14
     * @useinstead {@link OH_SCALING_MODE_SCALE_CROP_V2}
    */
    SCALING_MODE_SCALE_CROP = 2,
} OH_ScalingMode;

/**
 * @brief 每个编码样本的音频位数。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_BitsPerSample {
    /** 8位无符号整数采样。 */
    SAMPLE_U8 = 0,
    /** 16位有符号整数交样。 */
    SAMPLE_S16LE = 1,
    /** 24位有符号整数采样。 */
    SAMPLE_S24LE = 2,
    /** 32位有符号整数采样。 */
    SAMPLE_S32LE = 3,
    /** 32位浮点采样。 */
    SAMPLE_F32LE = 4,
    /** 8位无符号整数平面采样。 */
    SAMPLE_U8P = 5,
    /** 16位有符号整数平面采样。 */
    SAMPLE_S16P = 6,
    /** 24位有符号整数平面采样。 */
    SAMPLE_S24P = 7,
    /** 32位有符号整数平面采样。 */
    SAMPLE_S32P = 8,
    /** 32位浮点平面采样。 */
    SAMPLE_F32P = 9,
    /** 无效采样格式。 */
    INVALID_WIDTH = -1
} OH_BitsPerSample;

/**
 * @brief 色域。编解码都支持。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_ColorPrimary {
    /** BT709色域。 */
    COLOR_PRIMARY_BT709 = 1,
    /** 未指定色域。 */
    COLOR_PRIMARY_UNSPECIFIED = 2,
    /** BT470_M色域。 */
    COLOR_PRIMARY_BT470_M = 4,
    /** BT601_625色域。 */
    COLOR_PRIMARY_BT601_625 = 5,
    /** BT601_525色域。 */
    COLOR_PRIMARY_BT601_525 = 6,
    /** SMPTE_ST240色域。 */
    COLOR_PRIMARY_SMPTE_ST240 = 7,
    /** GENERIC_FILM色域。 */
    COLOR_PRIMARY_GENERIC_FILM = 8,
    /** BT2020色域。 */
    COLOR_PRIMARY_BT2020 = 9,
    /** SMPTE_ST428色域。 */
    COLOR_PRIMARY_SMPTE_ST428 = 10,
    /** P3DCI色域。 */
    COLOR_PRIMARY_P3DCI = 11,
    /** P3D65色域。 */
    COLOR_PRIMARY_P3D65 = 12,
} OH_ColorPrimary;

/**
 * @brief 转移特性。编解码都支持。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_TransferCharacteristic {
    /** BT709传递函数。 */
    TRANSFER_CHARACTERISTIC_BT709 = 1,
    /** 未指定传递函数。 */
    TRANSFER_CHARACTERISTIC_UNSPECIFIED = 2,
    /** GAMMA_2_2传递函数。 */
    TRANSFER_CHARACTERISTIC_GAMMA_2_2 = 4,
    /** GAMMA_2_8传递函数。 */
    TRANSFER_CHARACTERISTIC_GAMMA_2_8 = 5,
    /** BT601传递函数。 */
    TRANSFER_CHARACTERISTIC_BT601 = 6,
    /** SMPTE_ST240传递函数。 */
    TRANSFER_CHARACTERISTIC_SMPTE_ST240 = 7,
    /** LINEAR传递函数。 */
    TRANSFER_CHARACTERISTIC_LINEAR = 8,
    /** LOG传递函数。 */
    TRANSFER_CHARACTERISTIC_LOG = 9,
    /** LOG_SQRT传递函数。 */
    TRANSFER_CHARACTERISTIC_LOG_SQRT = 10,
    /** IEC_61966_2_4传递函数。 */
    TRANSFER_CHARACTERISTIC_IEC_61966_2_4 = 11,
    /** BT1361传递函数。 */
    TRANSFER_CHARACTERISTIC_BT1361 = 12,
    /** IEC_61966_2_1传递函数。 */
    TRANSFER_CHARACTERISTIC_IEC_61966_2_1 = 13,
    /** BT2020_10BIT传递函数。 */
    TRANSFER_CHARACTERISTIC_BT2020_10BIT = 14,
    /** BT2020_12BIT传递函数。 */
    TRANSFER_CHARACTERISTIC_BT2020_12BIT = 15,
    /** PQ传递函数。 */
    TRANSFER_CHARACTERISTIC_PQ = 16,
    /** SMPTE_ST428传递函数。 */
    TRANSFER_CHARACTERISTIC_SMPTE_ST428 = 17,
    /** HLG传递函数。 */
    TRANSFER_CHARACTERISTIC_HLG = 18,
} OH_TransferCharacteristic;

/**
 * @brief 矩阵系数。编解码都支持。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_MatrixCoefficient {
    /** 单位矩阵。 */
    MATRIX_COEFFICIENT_IDENTITY = 0,
    /** BT709转换矩阵。 */
    MATRIX_COEFFICIENT_BT709 = 1,
    /** 未指定转换矩阵。 */
    MATRIX_COEFFICIENT_UNSPECIFIED = 2,
    /** FCC转换矩阵。 */
    MATRIX_COEFFICIENT_FCC = 4,
    /** BT601_625转换矩阵。 */
    MATRIX_COEFFICIENT_BT601_625 = 5,
    /** BT601_525转换矩阵。 */
    MATRIX_COEFFICIENT_BT601_525 = 6,
    /** SMPTE_ST240转换矩阵。 */
    MATRIX_COEFFICIENT_SMPTE_ST240 = 7,
    /** YCGCO转换矩阵。 */
    MATRIX_COEFFICIENT_YCGCO = 8,
    /** BT2020_NCL转换矩阵。 */
    MATRIX_COEFFICIENT_BT2020_NCL = 9,
    /** BT2020_CL转换矩阵。 */
    MATRIX_COEFFICIENT_BT2020_CL = 10,
    /** SMPTE_ST2085转换矩阵。 */
    MATRIX_COEFFICIENT_SMPTE_ST2085 = 11,
    /** CHROMATICITY_NCL转换矩阵。 */
    MATRIX_COEFFICIENT_CHROMATICITY_NCL = 12,
    /** CHROMATICITY_CL转换矩阵。 */
    MATRIX_COEFFICIENT_CHROMATICITY_CL = 13,
    /** ICTCP转换矩阵。 */
    MATRIX_COEFFICIENT_ICTCP = 14,
} OH_MatrixCoefficient;

/**
 * @brief AVC级别。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
typedef enum OH_AVCLevel {
	/** 级别1 */
    AVC_LEVEL_1 = 0,
	/** 级别1b */
    AVC_LEVEL_1b = 1,
	/** 级别1.1 */
    AVC_LEVEL_11 = 2,
	/** 级别1.2 */
    AVC_LEVEL_12 = 3,
	/** 级别1.3 */
    AVC_LEVEL_13 = 4,
	/** 级别2 */
    AVC_LEVEL_2 = 5,
	/** 级别2.1 */
    AVC_LEVEL_21 = 6,
	/** 级别2.2 */
    AVC_LEVEL_22 = 7,
	/** 级别3 */
    AVC_LEVEL_3 = 8,
	/** 级别3.1 */
    AVC_LEVEL_31 = 9,
	/** 级别3.2 */
    AVC_LEVEL_32 = 10,
	/** 级别4 */
    AVC_LEVEL_4 = 11,
	/** 级别4.1 */
    AVC_LEVEL_41 = 12,
	/** 级别4.2 */
    AVC_LEVEL_42 = 13,
	/** 级别5 */
    AVC_LEVEL_5 = 14,
	/** 级别5.1 */
    AVC_LEVEL_51 = 15,
    /** 级别5.2 */
    AVC_LEVEL_52 = 16,
	/** 级别6 */
    AVC_LEVEL_6 = 17,
	/** 级别6.1 */
    AVC_LEVEL_61 = 18,
    /** 级别6.2 */
    AVC_LEVEL_62 = 19,
} OH_AVCLevel;

/**
 * @brief HEVC级别。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
typedef enum OH_HEVCLevel {
	/** 级别1 */
    HEVC_LEVEL_1 = 0,
	/** 级别2 */
    HEVC_LEVEL_2 = 1,
	/** 级别2.1 */
    HEVC_LEVEL_21 = 2,
	/** 级别3 */
    HEVC_LEVEL_3 = 3,
	/** 级别3.1 */
    HEVC_LEVEL_31 = 4,
	/** 级别4 */
    HEVC_LEVEL_4 = 5,
	/** 级别4.1 */
    HEVC_LEVEL_41 = 6,
	/** 级别5 */
    HEVC_LEVEL_5 = 7,
	/** 级别5.1 */
    HEVC_LEVEL_51 = 8,
	/** 级别5.2 */
    HEVC_LEVEL_52 = 9,
	/** 级别6 */
    HEVC_LEVEL_6 = 10,
	/** 级别6.1 */
    HEVC_LEVEL_61 = 11,
	/** 级别6.2 */
    HEVC_LEVEL_62 = 12,
} OH_HEVCLevel;

/**
 * @brief VVC级别。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 15
 */
typedef enum OH_VVCLevel {
	/** 级别1.0 */
    VVC_LEVEL_1 = 16,
    /** 级别2.0 */
    VVC_LEVEL_2 = 32,
    /** 级别2.1 */
    VVC_LEVEL_21 = 35,
    /** 级别3.0 */
    VVC_LEVEL_3 = 48,
    /** 级别3.1 */
    VVC_LEVEL_31 = 51,
    /** 级别4.0 */
    VVC_LEVEL_4 = 64,
    /** 级别4.1 */
    VVC_LEVEL_41 = 67,
    /** 级别5.0 */
    VVC_LEVEL_5 = 80,
    /** 级别5.1 */
    VVC_LEVEL_51 = 83,
    /** 级别5.2 */
    VVC_LEVEL_52 = 86,
    /** 级别6.0 */
    VVC_LEVEL_6 = 96,
    /** 级别6.1 */
    VVC_LEVEL_61 = 99,
    /** 级别6.2 */
    VVC_LEVEL_62 = 102,
    /** 级别6.3 */
    VVC_LEVEL_63 = 105,
    /** 级别15.5 */
    VVC_LEVEL_155 = 255,
} OH_VVCLevel;

/**
 * @brief MPEG2级别。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
typedef enum OH_MPEG2Level {
    /** 低级别。 */
    MPEG2_LEVEL_LOW = 0,
    /** 主级别。 */
    MPEG2_LEVEL_MAIN = 1,
    /** 高1440级别。 */
    MPEG2_LEVEL_HIGH_1440 = 2,
    /** 高级别。 */
    MPEG2_LEVEL_HIGH = 3,
} OH_MPEG2Level;

/**
 * @brief MPEG4级别。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
typedef enum OH_MPEG4Level {
    /** 级别0 */
    MPEG4_LEVEL_0  = 0,
    /** 级别0B。  */
    MPEG4_LEVEL_0B = 1,
    /** 级别1。  */
    MPEG4_LEVEL_1  = 2,
    /** 级别2。  */
    MPEG4_LEVEL_2  = 3,
    /** 级别3。  */
    MPEG4_LEVEL_3  = 4,
    /** 级别3B。  */
    MPEG4_LEVEL_3B = 5,
    /** 级别4。 */
    MPEG4_LEVEL_4  = 6,
    /** 级别4A。 */
    MPEG4_LEVEL_4A = 7,
    /** 级别5。 */
    MPEG4_LEVEL_5  = 8,
    /** 级别6。 */
    MPEG4_LEVEL_6  = 9,
}OH_MPEG4Level;

/**
 * @brief H.263级别。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 17
 */
typedef enum OH_H263Level {
    /** 级别10。 */
    H263_LEVEL_10 = 0,
    /** 级别20。 */
    H263_LEVEL_20 = 1,
    /** 级别30。 */
    H263_LEVEL_30 = 2,
    /** 级别40。 */
    H263_LEVEL_40 = 3,
    /** 级别45。 */
    H263_LEVEL_45 = 4,
    /** 级别50。 */
    H263_LEVEL_50 = 5,
    /** 级别60。 */
    H263_LEVEL_60 = 6,
    /** 级别70。 */
    H263_LEVEL_70 = 7,
} OH_H263Level;

/**
 * @brief 时域图片组参考模式。
 *
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 12
 */
typedef enum OH_TemporalGopReferenceMode {
    /** 参考最近的短期参考帧。 */
    ADJACENT_REFERENCE = 0,
    /** 参考最近的长期参考帧。 */
    JUMP_REFERENCE = 1,
    /** 均匀分层参考结构，在丢弃最高层级视频帧后，视频帧均匀分布。其中时域图片组个数必须为2的幂。 */
    UNIFORMLY_SCALED_REFERENCE = 2,
} OH_TemporalGopReferenceMode;

/**
 * @brief 编码器的比特率模式。
 * @syscap SystemCapability.Multimedia.Media.CodecBase
 * @since 10
 */
typedef enum OH_BitrateMode {
    /** 恒定比特率模式。 */
    BITRATE_MODE_CBR = 0,
    /** 可变比特率模式。 */
    BITRATE_MODE_VBR = 1,
    /** 恒定质量模式。 */
    BITRATE_MODE_CQ = 2,
    /**
     * @brief 质量稳定模式，仅支持H265（HEVC）。
     * @since 20
     */
    BITRATE_MODE_SQR = 3
} OH_BitrateMode;

#ifdef __cplusplus
}
#endif

#endif // NATIVE_AVCODEC_BASE_H
/** @} */
